package com.whately.core.base.model;

/**
 * <p>
 * 通过本地线程变量 保存日志记录实例
 * </p>
 *
 * @author liuhoujie
 * @date 2020/10/28
 * 
 */
@SuppressWarnings({"unused"})
public class RecorderThreadLocal {
    private static final ThreadLocal<RecorderInfoBO> local = new ThreadLocal<>();

    /**
     * <p>
     * 最终 获取 本地 日志记录实例 <br>
     * 和get() 区别是 当确定最后一次获取变量后, 清除本地线程变量 <br>
     * 预防在某些场景下的线程短时间不会结束, 对象不会被回收从而引发OOM
     * </p>
     *
     * @return RecorderInfoBO 日志记录实例
     */
    public static RecorderInfoBO finalGet() {
        RecorderInfoBO recorderInfoBO = local.get();
        local.remove();
        return recorderInfoBO;
    }


    /**
     * 设置本地线程的日志记录实例
     *
     * @param recorderInfo 日志记录实例
     */
    public static void set(RecorderInfoBO recorderInfo) {
        local.set(recorderInfo);
    }

    /**
     * 获取对象
     */
    public static RecorderInfoBO temporaryGet() {
        RecorderInfoBO recorderInfoBO = local.get();
        return recorderInfoBO;
    }
}
